# -*- coding:utf-8 -*-
# @File       :   制作花.py
# @Author     :   LINING
# @Time       :   2024/3/12 15:10
# @Description :
"""
https://leetcode.cn/problems/minimum-number-of-days-to-make-m-bouquets/description/
给你一个整数数组 bloomDay，以及两个整数 m 和 k 。

现需要制作 m 束花。制作花束时，需要使用花园中 相邻的 k 朵花 。

花园中有 n 朵花，第 i 朵花会在 bloomDay[i] 时盛开，恰好 可以用于 一束 花中。

请你返回从花园中摘 m 束花需要等待的最少的天数。如果不能摘到 m 束花则返回 -1 。



示例 1：

输入：bloomDay = [1,10,3,10,2], m = 3, k = 1
输出：3
解释：让我们一起观察这三天的花开过程，x 表示花开，而 _ 表示花还未开。
现在需要制作 3 束花，每束只需要 1 朵。
1 天后：[x, _, _, _, _]   // 只能制作 1 束花
2 天后：[x, _, _, _, x]   // 只能制作 2 束花
3 天后：[x, _, x, _, x]   // 可以制作 3 束花，答案为 3

解法：遍历数组，看能拿到多少个连续的数字
"""
# bloomDay = [1,10,3,10,2]
# m = 3
# k = 2
# bloomDay = [1,10,3,10,2]
# m = 3
# k = 1
bloomDay = [7,7,7,7,12,7,7]
m = 2
k = 3


def get_bloom(bloom_list, day, expert):
    """
    bloom_list:花朵数组
    day:期望天数
    expert:需要连续x朵
    return: 能做的花束
    """
    # 连续的花的朵数
    flower = 0
    # 可组成x个连续的花
    expert_ = 0
    for i in bloom_list:
        if i <= day:
            if flower+1 == expert:
                expert_ = expert_+1
                flower = 0
                continue
            flower = flower+1
        else:
            flower = 0
    return expert_


def get_min_day(bloom_list, expert, flowers):
    """
    bloom_list:花朵数组
    expert:需要连续x朵  k
    flowers:花束  m
    """
    left = 0
    right = max(bloom_list)+1
    while left < right:
        mid = int((left+right)/2)
        if get_bloom(bloom_list, mid, expert) >= flowers:
            right = mid
        else:
            left = mid+1
    return right


print(get_min_day(bloomDay, k, m))


